package com.example.hibernate;

import com.example.hibernate.pojo.Ta;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class controller {

    @GetMapping(value = "/test")
    @ResponseBody
    public String test(Integer pc)
    {
        //初始化服务注册对象
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure("hibernate.cfg.xml")//默认加载 gibernate.cfg.xml，如果配置文件的名称被修改
                .build();
        //从元信息获取session工厂
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

        //从工厂创建session连接
        Session session = sessionFactory.openSession();
        //开启事务
        Transaction tx = session.beginTransaction();

//        添加：
//        Ta ta = new Ta();
//        ta.setName("张三");
//        ta.setPassword("123");
//
//        session.save(ta);

//        修改：
//        Ta ta = new Ta();
//        ta.setId(1);
//        ta.setName("修改后的name");
//        ta.setPassword("修改后的密码");
//
//        session.update(ta);

//        删除：
//        Ta ta = new Ta();
//        ta.setId(1);
//        session.delete(ta);

        //查数据
//        Ta ta1 = session.get(Ta.class, 2);
//        System.out.println("获取到的ta：" + ta1);

        //HQL
//        String sql = "from Ta";//查询所有
//
//        Query<Ta> query = session.createQuery(sql);
//
//        List<Ta> list = query.list();
//
//        list.forEach(o -> {
//            System.out.println(o);
//        });


        //按照条件来查询
//        String sql = "from Ta where id = ?1";
//
//        Query<Ta> query = session.createQuery(sql);
//        //设置参数
//        query.setParameter(1,2);
//
//        Ta o = (Ta) query.uniqueResult();//返回一个结果
//
//        System.out.println(o.toString());

         //分页查询：
        String sql = "from Ta where password = ?1";

        Query query = session.createQuery(sql);

        //设置参数
        query.setParameter(1,"123");

        //第几页

        if (pc  == null)
        {

            pc = 1;

        }

        query.setFirstResult((pc - 1) * 1);

        //一页多少条数据
        query.setMaxResults(1);

        List list = query.list();

        list.forEach(o -> {
            System.out.println(o);
        });

        //提交事务
        tx.commit();

        //关闭
        session.close();
        return  "欢迎";

    }

}
